
#pragma once
#include "su_include.h"
#include "log_def.h"
#include <memory>
#include <vector>
#include "RpcProto.h"
#include "time/su_timestamp.h"
#include "BacktraceInfo.h"
#include "ProtoDispatch.h"

using namespace std; //废掉std命名空间
using namespace su; //废掉su命名空间

static const uint32 MAX_LOGIN_PLAYER = 100; //最大登陆游戏玩家
static const int64 OFFLINE_CACHE_SPAN = 60*5; //玩家离线缓存时长
static const char* HMAC_SHA_KEY = "Adkdk_key";

enum class SvrType : uint16  //服务器类型，意义同MainCmd
{
	Login = 1,
	Center = 2,
	Zone = 3,
	Rela = 4,
};

inline std::stringstream& operator<<(std::stringstream& s, SvrType t)
{
	switch (t)
	{
#define EASY_CODE(name) \
	case SvrType::name:\
		s<< #name;\
		return s;

		EASY_CODE(Login);
		EASY_CODE(Center);
		EASY_CODE(Zone);
		EASY_CODE(Rela);

#undef EASY_CODE

	default:
		s << "unknow SvrType " << (uint32)t;
		return s;
	}
}

inline SvrType SvrId2Type(uint32 svrId)
{
	uint16 t = svrId / 10;
	return (SvrType)t;
}

inline uint32 SvrId2Idx(uint32 svrId)
{
	return svrId % 10;
}


//没对象:
//	创建 player，进入OffLine

//		Login :
	//		断线 进入 OffLine
	//		主动退出 进入Logout
//		Logout : （登出）
//			超时，del player.
//		OffLine : （离线）
	//		fun LoginPlayer :
	//		替换session
	//		进入 Login
	//		离线超时，进入Logout.
	// 
// 

enum class LoginState
{
	Offline,//断线 超时，进入Logout.
	Login,
	Logout,
};
